import { addIcon } from '@iconify/vue';
import TuiIcons from '../../../assets/tui-icons';

// 全局图标配置对象
let globalIconConfig: Record<string, Record<string, string | { body: string, width?: number, height?: number }>> = {};

// 提取SVG宽高的辅助函数
function getSvgDimensions(svgStr: string) {
  // 提取宽高信息
  const widthMatch = svgStr.match(/width="([0-9]+)"/);
  const heightMatch = svgStr.match(/height="([0-9]+)"/);
  const width = widthMatch ? parseInt(widthMatch[1]) : 24;
  const height = heightMatch ? parseInt(heightMatch[1]) : 24;
  return { width, height };
}

// 注册单个图标
function registerIcon(prefix: string, iconName: string, iconValue: string | { body: string, width?: number, height?: number }) {
  const fullIconName = `${prefix}:${iconName}`;

  if (typeof iconValue === 'string' && iconValue.trim().startsWith('<svg')) {
    // 获取SVG宽高
    const { width, height } = getSvgDimensions(iconValue);
    // 直接使用完整SVG作为body
    addIcon(fullIconName, {
      body: iconValue,
      width,
      height
    });
  } else if (typeof iconValue === 'object' && iconValue !== null) {
    // 已经是Iconify格式，确保包含必要属性
    const iconData = iconValue as any;
    addIcon(fullIconName, {
      ...iconData,
      width: iconData.width || 24,
      height: iconData.height || 24
    });
  }
}

// 注册一组图标
function registerIcons(prefix: string, icons: Record<string, string | { body: string, width?: number, height?: number }>) {
  Object.entries(icons).forEach(([iconName, iconValue]) => {
    registerIcon(prefix, iconName, iconValue);
  });
}

// 初始化图标
function initIcons() {
  // 注册本地图标
  Object.entries(TuiIcons).forEach(([key, value]) => {
    registerIcon('tui', key, value);
  });

  // 注册全局配置的图标
  Object.entries(globalIconConfig).forEach(([prefix, icons]) => {
    registerIcons(prefix, icons);
  });
}

/**
 * 设置全局图标配置
 * @param config 图标配置对象，键为图标前缀，值为图标名称到图标数据的映射
 * @example
 * setupGlobalIcons({
 *   'custom': {
 *     'custom-icon': '<svg>...</svg>',
 *     'custom-icon2': { body: '<svg>...</svg>', width: 24, height: 24 }
 *   }
 * });
 */
function setupGlobalIcons(config: Record<string, Record<string, string | { body: string, width?: number, height?: number }>>) {
  // 合并配置
  Object.entries(config).forEach(([prefix, icons]) => {
    if (!globalIconConfig[prefix]) {
      globalIconConfig[prefix] = {};
    }
    Object.assign(globalIconConfig[prefix], icons);

    // 立即注册新添加的图标
    registerIcons(prefix, icons);
  });

  return globalIconConfig;
}

/**
 * 获取当前全局图标配置
 * @returns 全局图标配置对象
 * @example
 * const config = getGlobalIconConfig();
 * // 访问自定义图标
 * const customIcon = config['custom']['custom-icon'];
 */
function getGlobalIconConfig() {
  return { ...globalIconConfig };
}

// 导出工具函数
export { setupGlobalIcons, getGlobalIconConfig, initIcons };